// samsting : this file is auto create.

#ifndef ALIYUN_Ecs_DescribeInstancesResponse_H_
#define ALIYUN_Ecs_DescribeInstancesResponse_H_

#include "core/acs_response.h"

namespace aliyun { namespace Ecs {

class DescribeInstancesResponse : public AcsResponse {
public:
  DescribeInstancesResponse();

  class Instance {
    friend class DescribeInstancesResponse;
  public:

    class LockReason {
      friend class DescribeInstancesResponse;
      friend class Instance;
    public:
      const string& GetLockReason(void) const;
    private:
      string LockReason_;
    }; // LockReason 


    class Tag {
      friend class DescribeInstancesResponse;
      friend class Instance;
    public:
      const string& GetTagKey(void) const;
      const string& GetTagValue(void) const;
    private:
      string TagKey_;
      string TagValue_;
    }; // Tag 


    class VpcAttributes {
      friend class DescribeInstancesResponse;
      friend class Instance;
    public:
      const std::vector<IpAddress>& GetPrivateIpAddress(void) const;
      const string& GetVpcId(void) const;
      const string& GetVSwitchId(void) const;
      const string& GetNatIpAddress(void) const;
    private:
      std::vector<IpAddress> PrivateIpAddress_;
      string VpcId_;
      string VSwitchId_;
      string NatIpAddress_;
    }; // VpcAttributes 


    class EipAddress {
      friend class DescribeInstancesResponse;
      friend class Instance;
    public:
      const string& GetAllocationId(void) const;
      const string& GetIpAddress(void) const;
      int  GetBandwidth(void) const;
      const string& GetInternetChargeType(void) const;
    private:
      string AllocationId_;
      string IpAddress_;
      int    Bandwidth_;
      string InternetChargeType_;
    }; // EipAddress 

    const std::vector<LockReason>& GetOperationLocks(void) const;
    const std::vector<Tag>& GetTags(void) const;
    const VpcAttributes& GetVpcAttributes(void) const;
    const EipAddress& GetEipAddress(void) const;
    const std::vector<SecurityGroupId>& GetSecurityGroupIds(void) const;
    const std::vector<IpAddress>& GetPublicIpAddress(void) const;
    const std::vector<IpAddress>& GetInnerIpAddress(void) const;
    const string& GetInstanceId(void) const;
    const string& GetInstanceName(void) const;
    const string& GetDescription(void) const;
    const string& GetImageId(void) const;
    const string& GetRegionId(void) const;
    const string& GetZoneId(void) const;
    const string& GetClusterId(void) const;
    const string& GetInstanceType(void) const;
    const string& GetHostName(void) const;
    const string& GetStatus(void) const;
    const string& GetSerialNumber(void) const;
    const string& GetInternetChargeType(void) const;
    int  GetInternetMaxBandwidthIn(void) const;
    int  GetInternetMaxBandwidthOut(void) const;
    const string& GetVlanId(void) const;
    const string& GetCreationTime(void) const;
    const string& GetInstanceNetworkType(void) const;
    const string& GetInstanceChargeType(void) const;
    const string& GetExpiredTime(void) const;
    bool GetIoOptimized(void) const;
    bool GetDeviceAvailable(void) const;
  private:
    std::vector<LockReason> OperationLocks_;
    std::vector<Tag> Tags_;
    VpcAttributes VpcAttributes_;
    EipAddress EipAddress_;
    std::vector<SecurityGroupId> SecurityGroupIds_;
    std::vector<IpAddress> PublicIpAddress_;
    std::vector<IpAddress> InnerIpAddress_;
    string InstanceId_;
    string InstanceName_;
    string Description_;
    string ImageId_;
    string RegionId_;
    string ZoneId_;
    string ClusterId_;
    string InstanceType_;
    string HostName_;
    string Status_;
    string SerialNumber_;
    string InternetChargeType_;
    int    InternetMaxBandwidthIn_;
    int    InternetMaxBandwidthOut_;
    string VlanId_;
    string CreationTime_;
    string InstanceNetworkType_;
    string InstanceChargeType_;
    string ExpiredTime_;
    bool   IoOptimized_;
    bool   DeviceAvailable_;
  }; // Instance 

  const std::vector<Instance>& GetInstances(void) const;
  int  GetTotalCount(void) const;
  int  GetPageNumber(void) const;
  int  GetPageSize(void) const;

private:
  std::vector<Instance> Instances_;
  int    TotalCount_;
  int    PageNumber_;
  int    PageSize_;

protected:
  const char* BaseKey(void);
  void         UnmarshallerMap(std::map<string, string>& response_map);

};

} } // namespace aliyun { namespace Ecs {

#endif // #ifndef ALIYUN_Ecs_DescribeInstancesResponse_H_

// end of file 
